package com.leetcode;


import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 2363. 合并相似的物品 (简单)
 * 给你两个二维整数数组 items1 和 items2 ，表示两个物品集合。每个数组 items 有以下特质：
 * items[i] = [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 ，weighti 表示第 i 件物品的 重量 。
 * items 中每件物品的价值都是 唯一的 。
 * 请你返回一个二维数组 ret，其中 ret[i] = [valuei, weighti]， weighti 是所有价值为 valuei 物品的 重量之和 。
 * 注意：ret 应该按价值 升序 排序后返回。
 */
public class LeetCode2363 {

    public static void main(String[] arg0) {
        int[][] items1 = new int[3][2];
        items1[0] = new int[]{1, 1};
        items1[1] = new int[]{3, 2};
        items1[2] = new int[]{2, 3};

        int[][] items2 = new int[3][2];
        items2[0] = new int[]{2, 1};
        items2[1] = new int[]{3, 2};
        items2[2] = new int[]{1, 3};

        List<List<Integer>> ret = mergeSimilarItems(items1, items2);
        for (int i = 0; i < ret.size(); i++) {
            System.out.println("价值为 " + ret.get(i).get(0) + " 的所有物品的总重量为 " + ret.get(i).get(1));
        }
    }

    public static List<List<Integer>> mergeSimilarItems(int[][] items1, int[][] items2) {
        Map<Integer, Integer> map = new HashMap<>();

        for (int[] ints : items1) {
            map.put(ints[0], map.getOrDefault(ints[0], 0) + ints[1]);
        }

        for (int[] ints : items2) {
            map.put(ints[0], map.getOrDefault(ints[0], 0) + ints[1]);
        }

        List<List<Integer>> ret = new ArrayList<>();
        for (Integer value : map.keySet()) {
            List<Integer> item = new ArrayList<>();
            item.add(value);
            item.add(map.get(value));
            ret.add(item);
        }
        ret.sort(Comparator.comparingInt(integers -> integers.get(0)));
        return ret;
    }

}
